package com.yiboshi.rehrs.util;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RuntimeUtil;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;

import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.*;

/**
 * @author jack 2025/3/8
 */
@Slf4j
public class CommonUtil {



    @NotNull
    public static String buildLoginImageBase64(String image) {
        int indexOf = image.indexOf("base64");
        int start = 0;
        int end =image.length();
        if(indexOf>0){
            start = indexOf+7;
        }
        int len = image.length()-13;
        String substring = image.substring(image.length()-13);
        if(NumberUtil.isNumber(substring)){
            end = len;
        }
        if(start>0||end>0){
            image = image.substring(start,end);
        }
        image = image+System.currentTimeMillis();
        return image;
    }

    public static String waybillRedisListKey(String account ){
        LocalDate today = LocalDate.now();
        return "z:waybill:zset:"+today+":"+account;
    }

    public static String yuyueRedisKey(String account ){
       return "yuyue:"+account;
    }


    public static Map<String, String> toQueryMap(String params) {
        String[] split = params.split("&");
        Map<String, String> hash = new LinkedHashMap<>();
        for (String s : split) {
            String[] split1 = s.split("=");
            hash.put(split1[0], split1.length == 2 ? split1[1] : "");
        }
        return hash;
    }

    public static String toQueryString(Map<String, String> params) {
        String queryString = "";
        try {
            List<String> paramList = new ArrayList<>();
            for (
                    Map.Entry<String, String> entry : params.entrySet()) {
                String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
                String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");//   .replaceAll("\\+", "%20"); // JS与Java编码差异处理
                encodedKey = entry.getKey();
                encodedValue = entry.getValue();
                paramList.add(encodedKey + "=" + encodedValue);
            }
            queryString = String.join("&", paramList);
        } catch (Exception e) {

        }

        return queryString;
    }


   /* public static String buildTaskType(Integer autoTaskType) {
        if(Objects.equals(autoTaskType,0)){
            return "，未开启自动预约";
        }
        if(Objects.equals(autoTaskType,1)){
            return "，开启自动预约全部";
        }
        if(Objects.equals(autoTaskType,2)){
            return "，开启自动预约1和8";
        }
        return "";

    }*/

    public static String buildTaskType( Integer autoStatus, Integer autoTaskType) {
        if(Objects.equals(autoStatus,0)){
            return "关闭自动预约，需要手动预约";
        }
        if(Objects.equals(autoTaskType,1)){
            return "开启自动预约全部";
        }
        if(Objects.equals(autoTaskType,2)){
            return "开启自动预约1和8";
        }
        return "";

    }

    static  final int[][] chinaIpRanges = {
            {36, 36},    // 中国电信
            {42, 42},    // 中国科技网
            {49, 49},    // 中国电信
            {58, 58},    // 中国电信
            {106, 106},  // 中国教育网
            {110, 110},  // 中国联通
            {111, 111},  // 中国电信
            {112, 112},  // 中国铁通
            {113, 113},  // 中国电信
            {114, 114},  // 中国移动
            {115, 115},  // 中国电信
            {116, 116},  // 中国教育网
            {117, 117},  // 中国联通
            {118, 118},  // 中国电信
            {119, 119},  // 中国联通
            {120, 120},  // 中国电信
            {121, 121},  // 中国联通
            {122, 122},  // 中国电信
            {123, 123},  // 中国联通
            {124, 124},  // 中国科技网
            {125, 125},  // 中国联通
            {171, 175},  // 中国移动
            {180, 180},  // 中国电信
            {182, 183},  // 中国联通
            {202, 203},  // 中国教育网
            {210, 211},  // 中国科技网
            {218, 219},  // 中国电信
            {220, 221},  // 中国联通
            {222, 223}   // 中国电信
    };
    public static String generateRandomIp() {
        Random random = new Random();
        // 国内常见IP段（第一字节）


        // 随机选择一个IP段
        int[] range = chinaIpRanges[random.nextInt(chinaIpRanges.length)];
        int firstByte = range[0] + (range.length > 1 ? random.nextInt(range[1] - range[0] + 1) : 0);

        return String.format("%d.%d.%d.%d",
                firstByte,
                random.nextInt(256),
                random.nextInt(256),
                random.nextInt(256));
    }


    // 开启80端口（永久生效）
    public static boolean openPort80() {
        try {
            // 永久添加80端口
            String[] addCmd = {"sudo", "firewall-cmd", "--permanent", "--add-port=80/tcp"};
            RuntimeUtil.exec(addCmd);

            // 重新加载防火墙配置
            String[] reloadCmd = {"sudo", "firewall-cmd", "--reload"};
            RuntimeUtil.exec(reloadCmd);

            log.info("80端口已永久开启");
            return  true;
        } catch (Exception e) {
            log.error("开启80端口失败", e);

            DingdingUtils.sendMessageByLocal("开启80端口失败", e.getMessage());
        }
        return  false;
    }

    // 关闭80端口（永久生效）
    public static boolean closePort80() {
        try {
            // 永久移除80端口
            String[] removeCmd = {"sudo", "firewall-cmd", "--permanent", "--remove-port=80/tcp"};
            RuntimeUtil.exec(removeCmd);

            // 重新加载防火墙配置
            String[] reloadCmd = {"sudo", "firewall-cmd", "--reload"};
            RuntimeUtil.exec(reloadCmd);

            log.info("80端口已永久关闭");
            return  true;
        } catch (Exception e) {
            //log.error("关闭80端口失败", e);
            DingdingUtils.sendMessageByLocal("关闭80端口失败", e.getMessage());
        }
        return  false;
    }
    public static String getLogonTokenKey(LocalDate localDate) {
        return "n-logon-token:" + localDate;
    }



}
